package io.lvdaxian.mybatis04.session;

import java.sql.Connection;

/**
 * 表示 5种事务级别
 * <p>
 * JDBC（Java Database Connectivity）定义了五种事务隔离级别，这些级别用于控制事务的隔离性，以避免并发事务带来的问题，如脏读、不可重复读和幻读。以下是JDBC支持的五种事务隔离级别：
 * <p>
 * READ_UNCOMMITTED（读未提交）:
 * <p>
 * 允许脏读，事务可以读取其他未提交事务的更改。
 * 这是最低的隔离级别，可能会导致脏读、不可重复读和幻读。
 * READ_COMMITTED（读已提交）:
 * <p>
 * 事务只能读取到其他事务已经提交的更改。
 * 可以避免脏读，但仍然可能遇到不可重复读和幻读。
 * REPEATABLE_READ（可重复读）:
 * <p>
 * 事务在整个过程中可以多次读取同一数据，并且每次读取的结果是一致的。
 * 可以避免脏读和不可重复读，但仍然可能遇到幻读。
 * SERIALIZABLE（串行化）:
 * <p>
 * 最高的隔离级别，完全锁定涉及的所有数据，使得事务依次顺序执行。
 * 可以避免脏读、不可重复读和幻读，但会导致性能显著下降。
 * NONE:
 * <p>
 * 这不是JDBC标准定义的隔离级别，但一些数据库实现了它，表示没有事务隔离。
 * 使用NONE级别时，应用程序需要自己管理事务的隔离性。
 *
 * @author lihh
 */
public enum TransactionIsolationLevel {
  //包括JDBC支持的5个级别
  NONE(Connection.TRANSACTION_NONE),
  // 读 已提交
  READ_COMMITTED(Connection.TRANSACTION_READ_COMMITTED),
  // 读 未提交
  READ_UNCOMMITTED(Connection.TRANSACTION_READ_UNCOMMITTED),
  // 可重复读
  REPEATABLE_READ(Connection.TRANSACTION_REPEATABLE_READ),
  // 串行化
  SERIALIZABLE(Connection.TRANSACTION_SERIALIZABLE);
  
  private final int level;
  
  TransactionIsolationLevel(int level) {
    this.level = level;
  }
  
  public int getLevel() {
    return level;
  }
  
}
